renderbackground: Minimize style lookups
authorTimm Bäder <mail@baedert.org>
Thu, 19 Oct 2017 13:22:00 +0000 (15:22 +0200)
committerTimm Bäder <mail@baedert.org>
Fri, 20 Oct 2017 12:56:29 +0000 (14:56 +0200)
Move the early returns up so we don't look up all those css values for
no reason.

gtk/gtkrenderbackground.c

index 8e87e9ebeca5efb357daa887c7e730fd74d812e2..0d3f31a671472512d45d753d5e780e11a6dc52ad 100644 (file)
@@ -334,9 +334,9 @@ gtk_theming_background_paint_layer (GtkThemingBackground *bg,
 }
 
 static void
-gtk_theming_background_snapshot_layer (GtkThemingBackground *bg,
-                                       guint                 idx,
-                                       GtkSnapshot          *snapshot)
+gtk_theming_background_snapshot_layer (const GtkThemingBackground *bg,
+                                       guint                       idx,
+                                       GtkSnapshot                *snapshot)
 {
   GtkCssRepeatStyle hrepeat, vrepeat;
   const GtkCssValue *pos, *repeat;
@@ -345,32 +345,38 @@ gtk_theming_background_snapshot_layer (GtkThemingBackground *bg,
   double image_width, image_height;
   double width, height;
 
-  pos = _gtk_css_array_value_get_nth (gtk_css_style_get_value (bg->style, GTK_CSS_PROPERTY_BACKGROUND_POSITION), idx);
-  repeat = _gtk_css_array_value_get_nth (gtk_css_style_get_value (bg->style, GTK_CSS_PROPERTY_BACKGROUND_REPEAT), idx);
-  hrepeat = _gtk_css_background_repeat_value_get_x (repeat);
-  vrepeat = _gtk_css_background_repeat_value_get_y (repeat);
   image = _gtk_css_image_value_get_image (
               _gtk_css_array_value_get_nth (
                   gtk_css_style_get_value (bg->style, GTK_CSS_PROPERTY_BACKGROUND_IMAGE),
                   idx));
 
+  if (image == NULL)
+    return;
+
+  pos = _gtk_css_array_value_get_nth (gtk_css_style_get_value (bg->style, GTK_CSS_PROPERTY_BACKGROUND_POSITION), idx);
+  repeat = _gtk_css_array_value_get_nth (gtk_css_style_get_value (bg->style, GTK_CSS_PROPERTY_BACKGROUND_REPEAT), idx);
+  hrepeat = _gtk_css_background_repeat_value_get_x (repeat);
+  vrepeat = _gtk_css_background_repeat_value_get_y (repeat);
+
+
   origin = &bg->boxes[
                _gtk_css_area_value_get (
                    _gtk_css_array_value_get_nth (
                        gtk_css_style_get_value (bg->style, GTK_CSS_PROPERTY_BACKGROUND_ORIGIN),
                        idx))];
-  clip = &bg->boxes[
-              _gtk_css_area_value_get (
-                                _gtk_css_array_value_get_nth (
-                                                    gtk_css_style_get_value (bg->style, GTK_CSS_PROPERTY_BACKGROUND_CLIP),
-                                                                      idx))];
 
   width = origin->bounds.size.width;
   height = origin->bounds.size.height;
 
-  if (image == NULL || width <= 0 || height <= 0)
+  if (width <= 0 || height <= 0)
     return;
 
+  clip = &bg->boxes[
+              _gtk_css_area_value_get (
+                                _gtk_css_array_value_get_nth (
+                                                    gtk_css_style_get_value (bg->style, GTK_CSS_PROPERTY_BACKGROUND_CLIP),
+                                                                      idx))];
+
   _gtk_css_bg_size_value_compute_size (_gtk_css_array_value_get_nth (gtk_css_style_get_value (bg->style, GTK_CSS_PROPERTY_BACKGROUND_SIZE), idx),
                                        image,
                                        width,